home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 23 / AACD 23.iso / AACD / Programming / ExtraLib / include / rhosigma / extra.bc < prev    next >
Encoding:
Text File  |  2001-05-01  |  18.3 KB  |  412 lines

  1. ' ___________________________________________________________________________
  2. ' |*************************************************************************|
  3. ' |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
  4. ' |*| Set TAB to 4 for best readable file layout.  |*|  Maxon Basic 3.00  |*|
  5. ' |*|______________________________________________|*|____________________|*|
  6. ' |*************************************************************************|
  7. ' |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
  8. ' |*|               |*|  $Id: extra.bc (28.04.01)                         |*|
  9. ' |*| ###### ###### |*|  RhoSigma Source based on NDK 3.1 Includes 40.15  |*|
  10. ' |*| ##  ## ##   # |*| _________________________________________________ |*|
  11. ' |*| ##  ##  ##    |*|                                                   |*|
  12. ' |*| ######   ##   |*|  The public BASIC definitions for extra.library   |*|
  13. ' |*| ##      ##    |*|                                                   |*|
  14. ' |*| ##     ##   # |*| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |*|
  15. ' |*| ##     ###### |*|  Copyright © 1998-2001 RhoSigma, Roland Heyder    |*|
  16. ' |*|               |*|  All Rights Reserved.                             |*|
  17. ' |*|_______________|*|___________________________________________________|*|
  18. ' |*************************************************************************|
  19. ' ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
  20.  
  21. ' ACHTUNG: Im Hauptmodul muß VOR "$INCLUDE extra.bc bzw. -.bh" die Datei
  22. '           "rhosigma/settings.bc" includiert werden, damit diese Include-Datei
  23. '           richtig funktioniert. Ansonsten könnte es vorkommen, daß gar kein
  24. '           oder unvollständiger Code generiert wird.
  25.  
  26. '           SCHREIBEN SIE DIE INCLUDE-ANWEISUNG NICHT AN DEN KOPF DIESER DATEI !!
  27. '           ICH HABE DAS SCHON ALLES AUSPROBIERT, WAS JEDESMAL EINEN SOFORTIGEN
  28. '           SYSTEM-ABSTURZ ZUR FOLGE HATTE !!
  29.  
  30. '$UNDERLINES
  31.  
  32. '---------- die BufInfoBlock-Struktur von »BufInfo()« -----------------------
  33.  
  34. CONST bib_OwnerID%        = 0   '(APTR)  Task, der diesen Puffer öffnete
  35. CONST bib_MaxSize%        = 4   '(ULONG) momentane Größe des Datenbereichs in Byte
  36. CONST bib_FreeSize%        = 8   '(ULONG) davon momentan noch unbenutzt
  37. CONST bib_DataStart%    = 12  '(APTR)  Adresse des gegenwärtigen Datenbereichs
  38. CONST bib_CurPos%        = 16  '(ULONG) aktuelle Cursorposition (Zählbeginn=0 !!)
  39. CONST bib_EndPos%        = 20  '(ULONG) aktuelle Anfügeposition
  40. CONST bib_LastFind%        = 24  '(APTR)  Zeiger auf zuletzt gesuchte Daten od. 0-PTR
  41. CONST bib_FindSize%        = 28  '(ULONG) die Länge obiger Such-Daten oder null
  42. CONST bib_KeyNum%        = 32  '(ULONG) der Schlüssel der o.g. Such-Daten oder -1
  43. '------------------------------------- neu ab v2.062
  44. CONST bib_DataMemType%    = 36  '(ULONG) Speicherflags (MEMF_...) des Datenbereichs
  45. '---------------------------------------------------
  46. CONST bib_SizeOf%        = 40
  47.  
  48. '---------- Modes für »SeekBuf()« -------------------------------------------
  49.  
  50. CONST SKM_Current%    = 0        'Positionierung relativ zur gegenwärtigen CurPos
  51. CONST SKM_Start%    = 1        'Positionierung relativ zum Pufferanfang
  52. CONST SKM_End%        = 2        'Positionierung relativ zum Pufferende
  53. CONST SKM_Bookmark%    = 3        '»Position« = Nummer der gewünschten Bookmark
  54.  
  55. '---------- die Parameter-Struktur für »UnpackByteRun1()« -------------------
  56.  
  57. CONST up_InBuf%        = 0        '(APTR)  Zeiger auf die gepackten Daten
  58. CONST up_InLen%        = 4        '(ULONG) die Größe des gepackten Bereichs in Byte
  59. CONST up_Private%    = 8        '(ULONG) beim ersten Aufruf unbedingt auf 0 setzen
  60. CONST up_SizeOf%    = 12
  61.  
  62. '---------- Styles, Masken u. Flags für »SpecTextPrefs()« -------------------
  63.  
  64. '** Styles **
  65. CONST STS_Plain%     = 0    'normaler Text          \
  66. CONST STS_Underline% = 1    'unterstrichener Text |  können durch Addition oder
  67. CONST STS_Bold%         = 2    'fettgedruckter Text  |  log. ODER kombiniert werden
  68. CONST STS_Italic%     = 4    'kursiver Text          /
  69.  
  70. '** Masken **
  71. CONST STM_Normal%    = &H0    'keine Umrandung, d.h. normale Textausgabe
  72. CONST STM_Outline%    = &Hff    'volle Umrandung
  73. CONST STM_Shadow%    = &H1c    'Schatten unten/rechts sichtbar
  74. CONST STM_Ghost%    = &Hc1    'dies wirkt am besten, wenn Sie als »MPen«
  75.                             'die selbe Farbe verwenden, wie der Hinter-
  76.                             'grund hat
  77.  
  78. '** Flags **
  79. CONST STF_FJAM2&    = 1     'Normalerweise benutzt »SpecText()« den DrawMode JAM1,
  80.                          'mit diesem Flag wird jedoch JAM2 erzwungen.
  81. CONST STF_AP2MP&    = 2     'immer der gerade eingestellte »APen« des RastPorts
  82.                          'soll als »MainPen« (MPen) verwendet werden
  83. CONST STF_BP2TL&    = 4     'immer der gerade eingestellte »BPen« des RastPorts
  84.                          'soll als »TopLeftPen« (TLPen) verwendet werden
  85. CONST STF_OP2BR&    = 8     'immer der gerade eingestellte »OPen« des RastPorts
  86.                          'soll als »BottomRightPen« (BRPen) verwendet werden
  87. CONST STF_PSWAP&    = 16 'vertauscht »TLPen« u. »BRPen«, d.h. »TLPen« wird für
  88.                          'un./re. und »BRPen« für ob./li. verwendet
  89.  
  90. ' Die folgenden Flags haben keinen Einfluß auf die Arbeitsweise der Funk-
  91. ' tion »SpecText()«. Sie dienen nur dazu, »SpecTextPrefs()« mitzuteilen,
  92. ' welche Parameter neu eingestellt werden sollen. Damit soll überflüssiges
  93. ' Register-retten verhindert werden, da Sie nicht jedem Register, welches
  94. ' von »SpecTextPrefs()« erwartet wird, zwangsläufig einen sinnvollen Wert
  95. ' zuweisen müssen. Wenn Sie z.B. mit D0-D5 irgendwelche Berechnungen machen,
  96. ' oder sie als Schleifenzähler benutzen, und wollen dann den »MPen« ver-
  97. ' ändern, dann brauchen Sie nur D0 mit diesem zu initialisieren und D5 das
  98. ' entsprechende Flag (STF_CMPEN) zuweisen, während Sie sich um D1-D4 nicht
  99. ' sorgen müssen, da diese bei jenem Aufruf vollkommen unberührt und unver-
  100. ' ändert bleiben, d.h. sie müssen weder gerettet noch initialisiert werden.
  101. '
  102. ' ACHTUNG: Wenn keines der folgenden Flags angegeben wird, dann heißt das
  103. ' ¯¯¯¯¯¯¯¯ nicht, daß KEIN Wert geändert werden soll, sondern daß ALLE Werte
  104. '          zu ändern sind !! (In diesem Falle müssen dann logischer Weise
  105. '                              auch alle Register initialisiert werden.)
  106.  
  107. CONST STF_CMPEN&    = 1024    'Nur den »MPen« auf den angegebenen Wert ändern.
  108. CONST STF_TLPEN&    = 2048    'Nur den »TLPen« auf den angegebenen Wert ändern.
  109. CONST STF_BRPEN&    = 4096    'Nur den »BRPen« auf den angegebenen Wert ändern.
  110. CONST STF_STYLE&    = 8192    'Nur den SoftStyle auf den angegebenen Wert ändern.
  111. CONST STF_CMASK&    = 16384    'Nur die Maske auf den angegebenen Wert ändern.
  112. CONST STF_FLAGS&    = 32768    'Nur die Flags auf den angegebenen Wert ändern.
  113.  
  114. ' Es können auch alle Kombinationen der obigen Flags angegeben werden. Die
  115. ' Funktion »SpecTextPrefs()« wird dann alles das, was Sie wünschen, ändern.
  116.  
  117. '---------- Fehlernummern von »LastError()« ---------------------------------
  118.  
  119. CONST NoError%        =  0    'bis jetzt ist kein Fehler aufgetreten
  120.  
  121. '** DBS-Funktionen **
  122. CONST BufInvalid%    =  10    'die angegebene Adresse war kein BufHandle
  123. CONST NotOwner%        =  11    'nur der Task, der den Puffer öffnete, darf ihn auch wieder schließen
  124. CONST NoBufMemory%    =  12    'nicht mehr genügend Speicher frei (MEMF_ s.a. bib_DataMemType%)
  125. CONST NoDOSProcess%    =  13    'die aufrufende Anwendung war kein DOS-Prozess
  126. CONST IoErrRequired%=  14    'ein DOS-Error ist aufgetreten (»IoErr()« der dos.library aufrufen)
  127. CONST SeekBadMode%    =  15    'der angegebene »SeekMode« ist unbekannt
  128. CONST SeekOffsetErr%=  16    'gewünschte »Position« unter-/überschreitet den Pufferanfang bzw. das Pufferende
  129. CONST NoFindMem%    =  17    'kein Speicher für Zwischenspeicherung der zu suchenden Daten (MEMF_PUBLIC)
  130. CONST FindTooLong%    =  18    'von CurPos bis EndPos bzw. Pufferanfang sind nur noch weniger Daten, als gesucht werden sollen
  131. CONST NoFindAvail%    =  19    'für »FindNext()/FindPrev()« ist mindestens ein »FindData()« erforderlich (gilt für jeden möglichen Schlüssel)
  132. CONST InvalidKey%    =  20    'ein angegebener Schlüssel liegt außerhalb des gültigen Bereichs (bei Find-Funktionen max. 8 (0-7) / bei Bookmarks max. 16 (0-15))
  133. CONST MarkNotSet%    =  21    'die angegebene Bookmark ist noch nicht gesetzt
  134. CONST MarkCleared%    =  22    'die Daten an der angegebenen Bookmark wurden durch »Clear()« gelöscht
  135.  
  136. '** StringToLong() **
  137. CONST ResultValid%    =  30    'alles in Ordnung (das Ergebnis ist gültig)
  138. CONST InvalidChar%    =  31    'im String wurde ein illegales Zeichen gefunden
  139. CONST Overflow%        =  32    'repräsentierte Zahl wäre größer als 32 Bit (LONG)
  140.  
  141. '** FillMem() **
  142. CONST OddAddress%    =  35    'ungerade Startadresse bei WORD- oder LONG-Modus
  143. CONST NotFilled%    =  36    'keine Füllung wegen Abrundung (Bereich zu klein, um wenigstens 1 Wert aufzunehmen)
  144.  
  145. '** ShowMsg() **
  146. CONST BadHeight%    =  40    'angegebene Höhe war größer als 200 Videozeilen
  147. CONST NoStructMem%    =  41    'kein Speicher für benötigte Gfx-Strukturen (MEMF_ANY)
  148. CONST NoChipMemory%    =  42    'nicht genügend Speicher für die BitPlanes (MEMF_CHIP)
  149. CONST SpecTextErr%    =  43    'die Funktion »SpecText()« hat einen Fehler gemeldet
  150.  
  151. '---------- die Basis-Struktur der extra.library ----------------------------
  152.  
  153. CONST xb_Copyright%    = 34    '(APTR) ein einzeiliger Copyrightvermerk(+0)
  154. CONST xb_Private%    = 38    'ab hier 54 Bytes privater Datenbereich der Library
  155. CONST xb_SizeOf%    = 92
  156.  
  157. '---------- von der extra.library erzeugte Alert's --------------------------
  158.  
  159. CONST EL_AlertD&     =    &HB5000000
  160. CONST EL_AlertR&     =    &H35000000
  161. 'Typen-Kennungen der extra.library ($B5000000=DeadEnd/$35000000=Recovery)
  162.  
  163. CONST EL_NoDfo&         =    &HB503800B
  164. 'konnte diskfont.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen
  165.  
  166. CONST EL_NoDOS&         =    &HB5038007
  167. 'konnte dos.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen
  168.  
  169. CONST EL_NoGfx&         =    &HB5038002
  170. 'konnte graphics.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen
  171.  
  172. CONST EL_NoInt&         =    &HB5038004
  173. 'konnte intuition.library V33+ (bzw. V36+ für CGX-Version) nicht öffnen
  174.  
  175. CONST EL_Trespassed& =    &HB5068035
  176. 'Task hat Library benutzt, ohne sie vorher zu öffnen
  177.  
  178. '---------- mit extra.library verwendbare SUB-Routinen ----------------------
  179.  
  180. CONST SMTPOS_C%    = -1    'Text zentrieren
  181. CONST SMTPOS_L%    = -2    'Text linksbündig
  182. CONST SMTPOS_R%    = -3    'Text rechtsbündig
  183.  
  184. '*** extra.library / SMCOLOR() ***
  185. '============================================================================
  186. ' Diese Routine erstellt einen Farbeintrag für die optional anzugebende Farb-
  187. ' tabelle für die Funktion »ShowMsg()«.
  188. '----------------------------------------------------------------------------
  189. ' Definiert:    extra.bc  (Copyright © 1998-2001 RhoSigma, Roland Heyder)
  190. '
  191. ' Schablone:    Pen%/A/N, Red%/A/N, Green%/A/N, Blue%/A/N, EndFlag%/K/S
  192. '
  193. ' Parameter:    Pen%     --> Nr. des zu ändernden Farbstiftes (3-15)
  194. '                                (0-2 sind reserviert u. werden ignoriert)
  195. '
  196. '                Red%     --> Rot-Anteil der neuen Farbe (0-15)
  197. '                Green%     --> Grün-Anteil der neuen Farbe (0-15)
  198. '                Blue%     --> Blau-Anteil der neuen Farbe (0-15)
  199. '
  200. '                EndFlag% --> - TRUE% , dann endet hier die Farbtabelle
  201. '                             - FALSE%, dann MUSS noch ein weiterer Farbeintrag
  202. '                                       (SUB-Aufruf) folgen.
  203. '
  204. ' Bemerkung:    Nach Aufruf der Routine für alle einzelnen Farbeinträge finden
  205. '                Sie die fertige Farbtabelle in der Variable »smFarb$«, welche
  206. '                Sie an »ShowMsg()« mittels »SADD(smFarb$)« übergeben müssen.
  207. '
  208. '                Ein Beispiel für die Benutzung dieser Routine finden Sie in der
  209. '                Datei »demo/ShowMsgDemo.BAS«.
  210. '
  211. '   ACHTUNG:    Sie dürfen in Ihrem Programm keine eigene Stringvariable mit
  212. '   ¯¯¯¯¯¯¯¯    dem Namen »smFarb$« verwenden, da diese unweigerlich durch
  213. '                dieses Unterprogramm überschrieben werden würde.
  214. '
  215. '                Außerdem müssen Sie die Farbtabelle immer unmittelbar vor
  216. '                dem »ShowMsg()«-Aufruf definieren, da die Variable »smFarb$«
  217. '                jedesmal wieder überschrieben wird, und daher immer nur die
  218. '                zuletzt erstellte Farbtabelle enthält.
  219. '
  220. ' Siehe auch:  »SMTEXTP()«, »SMTEXT()«, »ShowMsg()«
  221. '============================================================================
  222.  
  223. SUB SMCOLOR(Pen%,Red%,Green%,Blue%,EndFlag%) STATIC
  224. SHARED smFarb$
  225. STATIC lFlag%
  226.  
  227.     IF lFlag%<>FALSE% THEN    ' wird eine neue Farbtabelle angefangen,
  228.         lFlag%=FALSE%        ' dann »smFarb$« erst zurücksetzen
  229.         smFarb$=""
  230.     ELSE
  231.         lFlag%=EndFlag%
  232.     END IF
  233.  
  234.     smFarb$=smFarb$+CHR$(Pen%)+MKI$(Red%*256+Green%*16+Blue%)
  235.  
  236.     IF EndFlag%=FALSE% THEN        ' wenn kein END-Flag, dann Continue-Byte
  237.         smFarb$=smFarb$+CHR$(1)    ' setzen, ansonsten 0-Byte
  238.     ELSE
  239.         smFarb$=smFarb$+CHR$(0)
  240.     END IF
  241.  
  242. END SUB
  243.  
  244. '*** extra.library / SMTEXTP() ***
  245. '============================================================================
  246. ' Diese Routine erstellt einen Teilstring des Parameterstrings der Funktion
  247. ' »ShowMsg()« inclusive der gewünschten Einstellungen für die Textausgabe.
  248. ' Wahlweise kann der Text automatisch zentriert, oder links- bzw. rechtsbündig
  249. ' ausgerichtet werden.
  250. '----------------------------------------------------------------------------
  251. ' Definiert:    extra.bc  (Copyright © 1998-2001 RhoSigma, Roland Heyder)
  252. '
  253. ' Schablone:    xPos%/A/N, yPos%/A/N, MPen%/A/N, TLPen%/A/N, BRPen%/A/N,
  254. '                Style%/A/N, Mask%/A/N, Text$/A, EndFlag%/K/S
  255. '
  256. ' Parameter:    xPos%     --> x-Position des Textes,
  257. '                                oder einer der oben definierten SMTPOS-Werte
  258. '
  259. '                yPos%     --> y-Position des Textes,
  260. '                                Ausrichtung an der Oberkante des Fonts
  261. '
  262. '                MPen%     --> gewünschter MainPen        \
  263. '                TLPen%     --> gewünschter TopLeftPen     |
  264. '                BRPen%     --> gewünschter BottomRightPen | (s. »SpecTextPrefs()«)
  265. '                Style%     --> gewünschter SoftStyle      |
  266. '                Mask%     --> gewünschte  Randmaske      /
  267. '
  268. '                Text$     --> der Text selbst als Variable oder Konstante
  269. '
  270. '                EndFlag% --> - TRUE% , dann endet hier der Parameterstring
  271. '                             - FALSE%, dann MUSS noch ein weiterer Teilstring
  272. '                                       (SUB-Aufruf) folgen.
  273. '
  274. ' Bemerkung:    Nach Aufruf der Routine für alle einzelnen Teilstrings finden
  275. '                Sie den fertigen Parameterstring in der Variable »smAlert$«,
  276. '                welche Sie an »ShowMsg()« mittels »SADD(smAlert$)« übergeben
  277. '                müssen.
  278. '
  279. '                Diese Routine sollten Sie nur dann verwenden, wenn Sie für
  280. '                diesen Teilstring neue Einstellungen für Farben etc. machen
  281. '                wollen. Wenn dieser Teilstring jedoch mit den gleichen Ein-
  282. '                stellungen ausgegeben werden soll, wie der vorhergehende bzw.
  283. '                Sie die Default-Einstellungen verwenden wollen, dann müssen
  284. '                Sie stattdessen die Routine »SMTEXT()« verwenden.
  285. '
  286. '                Ein Beispiel für die Benutzung dieser Routine finden Sie in
  287. '                der Datei »demo/ShowMsgDemo.BAS«.
  288. '
  289. '   ACHTUNG:    Sie dürfen in Ihrem Programm keine eigene Stringvariable mit
  290. '   ¯¯¯¯¯¯¯¯    dem Namen »smAlert$« verwenden, da diese unweigerlich durch
  291. '                dieses Unterprogramm überschrieben werden würde. Außerdem
  292. '                dürfen Sie auch nicht »smlFlag%« benutzen, da über dieses
  293. '                wichtige Daten zwischen den beiden Routinen »SMTEXTP()« und
  294. '                »SMTEXT()« ausgetauscht werden !!
  295. '
  296. '                Außerdem müssen Sie den Parameterstring immer unmittelbar vor
  297. '                dem »ShowMsg()«-Aufruf definieren, da die Variable »smAlert$«
  298. '                jedesmal wieder überschrieben wird, und daher immer nur den
  299. '                zuletzt erstellten Parameterstring enthält.
  300. '
  301. ' Siehe auch:  »SMCOLOR()«, »SMTEXT()«, »ShowMsg()«
  302. '============================================================================
  303.  
  304. SUB SMTEXTP(xPos%,yPos%,MPen%,TLPen%,BRPen%,Style%,Mask%,Text$,EndFlag%) STATIC
  305. SHARED smAlert$,smlFlag%
  306.  
  307.     IF smlFlag%<>FALSE% THEN    ' wird ein neuer ParamString angefangen,
  308.         smlFlag%=FALSE%            ' dann »Alert$« erst zurücksetzen
  309.         smAlert$=""
  310.     ELSE
  311.         smlFlag%=EndFlag%
  312.     END IF
  313.  
  314.     IF xPos%=SMTPOS_C% THEN                ' gewünschte Ausrichtung,
  315.         xPos%=(640-(LEN(Text$)*8))/2    ' falls angegeben
  316.     ELSEIF xPos%=SMTPOS_L% THEN
  317.         xPos%=12
  318.     ELSEIF xPos%=SMTPOS_R% THEN
  319.         xPos%=(640-(LEN(Text$)*8))-12
  320.     END IF
  321.  
  322.     smAlert$=smAlert$+MKI$(xPos%)+CHR$(yPos%)+CHR$(1)+CHR$(MPen%)+CHR$(TLPen%)
  323.     smAlert$=smAlert$+CHR$(BRPen%)+CHR$(Style%)+CHR$(Mask%)+Text$+CHR$(0)
  324.  
  325.     IF EndFlag%=FALSE% THEN            ' wenn kein END-Flag, dann Continue-Byte
  326.         smAlert$=smAlert$+CHR$(1)    ' setzen, ansonsten 0-Byte
  327.     ELSE
  328.         smAlert$=smAlert$+CHR$(0)
  329.     END IF
  330.  
  331. END SUB
  332.  
  333. '*** extra.library / SMTEXT() ***
  334. '============================================================================
  335. ' Diese Routine erstellt einen Teilstring des Parameterstrings der Funktion
  336. ' »ShowMsg()«. Wahlweise kann der Text automatisch zentriert, oder links- bzw.
  337. ' rechtsbündig ausgerichtet werden.
  338. '----------------------------------------------------------------------------
  339. ' Definiert:    extra.bc  (Copyright © 1998-2001 RhoSigma, Roland Heyder)
  340. '
  341. ' Schablone:    xPos%/A/N, yPos%/A/N, Text$/A, EndFlag%/K/S
  342. '
  343. ' Parameter:    xPos%     --> x-Position des Textes,
  344. '                                oder einer der oben definierten SMTPOS-Werte
  345. '
  346. '                yPos%     --> y-Position des Textes,
  347. '                                Ausrichtung an der Oberkante des Fonts
  348. '
  349. '                Text$     --> der Text selbst als Variable oder Konstante
  350. '
  351. '                EndFlag% --> - TRUE% , dann endet hier der Parameterstring
  352. '                             - FALSE%, dann MUSS noch ein weiterer Teilstring
  353. '                                       (SUB-Aufruf) folgen.
  354. '
  355. ' Bemerkung:    Nach Aufruf der Routine für alle einzelnen Teilstrings finden
  356. '                Sie den fertigen Parameterstring in der Variable »smAlert$«,
  357. '                welche Sie an »ShowMsg()« mittels »SADD(smAlert$)« übergeben
  358. '                müssen.
  359. '
  360. '                Dieses Macro sollten Sie nur dann verwenden, wenn Sie für
  361. '                diesen Teilstring die gleichen Einstellungen wie für den vor-
  362. '                hergehenden Teilstring verwenden wollen. Wenn dieser Teil-
  363. '                string jedoch neue Einstellungen für Farben etc. erhalten
  364. '                soll, dann müssen Sie stattdessen das Macro »SMTEXTP()« ver-
  365. '                wenden.
  366. '
  367. '                Ein Beispiel für die Benutzung dieser Routine finden Sie in
  368. '                der Datei »demo/ShowMsgDemo.BAS«.
  369. '
  370. '   ACHTUNG:    Sie dürfen in Ihrem Programm keine eigene Stringvariable mit
  371. '   ¯¯¯¯¯¯¯¯    dem Namen »smAlert$« verwenden, da diese unweigerlich durch
  372. '                dieses Unterprogramm überschrieben werden würde. Außerdem
  373. '                dürfen Sie auch nicht »smlFlag%« benutzen, da über dieses
  374. '                wichtige Daten zwischen den beiden Routinen »SMTEXTP()« und
  375. '                »SMTEXT()« ausgetauscht werden !!
  376. '
  377. '                Außerdem müssen Sie den Parameterstring immer unmittelbar vor
  378. '                dem »ShowMsg()«-Aufruf definieren, da die Variable »smAlert$«
  379. '                jedesmal wieder überschrieben wird, und daher immer nur den
  380. '                zuletzt erstellten Parameterstring enthält.
  381. '
  382. ' Siehe auch:  »SMCOLOR()«, »SMTEXTP()«, »ShowMsg()«
  383. '============================================================================
  384.  
  385. SUB SMTEXT(xPos%,yPos%,Text$,EndFlag%) STATIC
  386. SHARED smAlert$,smlFlag%
  387.  
  388.     IF smlFlag%<>FALSE% THEN    ' wird ein neuer ParamString angefangen,
  389.         smlFlag%=FALSE%            ' dann »Alert$« erst zurücksetzen
  390.         smAlert$=""
  391.     ELSE
  392.         smlFlag%=EndFlag%
  393.     END IF
  394.  
  395.     IF xPos%=SMTPOS_C% THEN                ' gewünschte Ausrichtung,
  396.         xPos%=(640-(LEN(Text$)*8))/2    ' falls angegeben
  397.     ELSEIF xPos%=SMTPOS_L% THEN
  398.         xPos%=12
  399.     ELSEIF xPos%=SMTPOS_R% THEN
  400.         xPos%=(640-(LEN(Text$)*8))-12
  401.     END IF
  402.  
  403.     smAlert$=smAlert$+MKI$(xPos%)+CHR$(yPos%)+CHR$(0)+Text$+CHR$(0)
  404.  
  405.     IF EndFlag%=FALSE% THEN            ' wenn kein END-Flag, dann Continue-Byte
  406.         smAlert$=smAlert$+CHR$(1)    ' setzen, ansonsten 0-Byte
  407.     ELSE
  408.         smAlert$=smAlert$+CHR$(0)
  409.     END IF
  410.  
  411. END SUB
  412.